/**
 * @file image_saver.h
 * @brief 图像保存模块接口定义
 * @version 1.0
 * @date 2023-05-20
 */

#ifndef IMAGE_SAVER_H
#define IMAGE_SAVER_H

#include <stdbool.h>
#include "common_defs.h"
#include "image_process.h"

#ifdef __cplusplus
extern "C" {
#endif

// 图像保存配置
typedef struct {
    bool enabled;                   // 是否启用图像保存
    char save_dir[MAX_PATH_LENGTH]; // 保存目录
    int save_interval;              // 保存间隔(帧数)
    int jpg_quality;                // JPEG质量(1-100)
    bool save_original;             // 是否保存原始图像
    bool save_processed;            // 是否保存处理后的图像
    bool append_timestamp;          // 是否在文件名后添加时间戳
    char prefix[MAX_STRING_LENGTH]; // 文件名前缀
} ImageSaverConfig;

/**
 * @brief 初始化图像保存模块
 * 
 * @param config 图像保存配置
 * @return int 成功返回0，失败返回-1
 */
int init_image_saver(ImageSaverConfig *config);

/**
 * @brief 保存单张图像
 * 
 * @param image 图像数据
 * @param type 图像类型("原始", "处理", "结果"等)
 * @return int 成功返回0，失败返回-1
 */
int save_image(const Image *image, const char *type);

/**
 * @brief 保存原始图像数据
 * 
 * @param image_data 图像数据
 * @param width 图像宽度
 * @param height 图像高度
 * @param channels 颜色通道数
 * @param type 图像类型
 * @return int 成功返回0，失败返回-1
 */
int save_raw_image(const unsigned char *image_data, int width, int height, int channels, const char *type);

/**
 * @brief 获取当前保存状态
 * 
 * @return true 当前应该保存图像
 * @return false 当前不需要保存图像
 */
bool should_save_image(void);

/**
 * @brief 更新帧计数器
 */
void update_frame_counter(void);

/**
 * @brief 创建保存目录
 * 
 * @return int 成功返回0，失败返回-1
 */
int create_save_directory(void);

/**
 * @brief 清理资源
 */
void cleanup_image_saver(void);

#ifdef __cplusplus
}
#endif

#endif /* IMAGE_SAVER_H */ 